﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Tesis2.Models;

namespace Tesis2.Controllers
{
    public class SolicitudController : Controller
    {
        private TesisDBContext db = new TesisDBContext();

        //
        // GET: /Solicitud/

        public ActionResult Index()
        {
            var solicitudes = db.Solicitudes.Include(s => s.EstadoSolicitud).Include(s => s.UsuarioSolicitud);
            return View(solicitudes.ToList());
        }

        public ActionResult Buscar(string Codigo)
        {
            var solicitudes = from item in db.Solicitudes
                             where item.Numero.Contains(Codigo)
                             select item;

            return View(solicitudes.ToList());
        }

        //
        // GET: /Solicitud/Details/5

        public ActionResult Details(int id = 0)
        {
            Solicitud solicitud = db.Solicitudes.Find(id);
            if (solicitud == null)
            {
                return HttpNotFound();
            }
            Session["Detalle"] = (from item in db.DetalleSolicitudes
                                  where item.SolicitudDetalleID.Equals(solicitud.SolicitudID)
                                  select item).Include(d => d.UnidadSolicitud).Include(d => d.ProductoSolicitud).Include(d => d.SolicitudDetalle).ToList();
            
            return View(solicitud);
        }

        //
        // GET: /Solicitud/Create

        public ActionResult Create()
        {
            ViewBag.EstadoSolicitudID = new SelectList((from item in db.Parametros
                                                        where item.CodigoUnico.Equals("ESTADOSOLICITUD")
                                                        select item), "ParametroID", "Valor").ToList();
            ViewBag.UsuarioSolicitudID = new SelectList(db.Usuarios, "UsuarioID", "Nombre");
            return View();
        }

        //
        // POST: /Solicitud/Create

        [HttpPost]
        public ActionResult Create(Solicitud solicitud)
        {
            if (ModelState.IsValid)
            {
                Usuario u = (Usuario)Session["Usuario"];
                solicitud.UsuarioSolicitudID = u.UsuarioID;
                Session["Solicitud"] = solicitud;
                db.Solicitudes.Add(solicitud);
                db.SaveChanges();
                return RedirectToAction("Create", "DetalleSolicitud", FormMethod.Get);
            }

            ViewBag.EstadoSolicitudID = new SelectList(db.Parametros, "ParametroID", "Nombre", solicitud.EstadoSolicitudID);
            ViewBag.UsuarioSolicitudID = new SelectList(db.Usuarios, "UsuarioID", "Nombre", solicitud.UsuarioSolicitudID);
            Session["Solicitud"] = solicitud;
            
            return View(solicitud);
        }

        public ActionResult Agregar()
        {
            Solicitud s = (Solicitud)Session["Solicitud"];
            Session["Detalle"] = (from item in db.DetalleSolicitudes
                                              where item.SolicitudDetalleID.Equals(s.SolicitudID)
                                                 select item).Include(d => d.UnidadSolicitud).Include(d => d.ProductoSolicitud).Include(d => d.SolicitudDetalle).ToList();
            ViewBag.EstadoSolicitudID = new SelectList((from item in db.Parametros
                                                        where item.CodigoUnico.Equals("ESTADOSOLICITUD")
                                                        select item), "ParametroID", "Valor").ToList();
            ViewBag.UsuarioSolicitudID = new SelectList(db.Usuarios, "UsuarioID", "Nombre");
            return View(s);
        }

        public ActionResult _Detalle()
        {
            var detallesolicitudes = db.DetalleSolicitudes.Include(d => d.UnidadSolicitud).Include(d => d.ProductoSolicitud).Include(d => d.SolicitudDetalle);
            return View(Session["Detalle"]);
        }

        //
        // GET: /Solicitud/Edit/5

        public ActionResult Edit(int id = 0)
        {
            Solicitud solicitud = db.Solicitudes.Find(id);
            if (solicitud == null)
            {
                return HttpNotFound();
            }
            ViewBag.EstadoSolicitudID = new SelectList(db.Parametros, "ParametroID", "Nombre", solicitud.EstadoSolicitudID);
            ViewBag.UsuarioSolicitudID = new SelectList(db.Usuarios, "UsuarioID", "Nombre", solicitud.UsuarioSolicitudID);
            return View(solicitud);
        }

        //
        // POST: /Solicitud/Edit/5

        [HttpPost]
        public ActionResult Edit(Solicitud solicitud)
        {
            if (ModelState.IsValid)
            {
                db.Entry(solicitud).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            ViewBag.EstadoSolicitudID = new SelectList(db.Parametros, "ParametroID", "Nombre", solicitud.EstadoSolicitudID);
            ViewBag.UsuarioSolicitudID = new SelectList(db.Usuarios, "UsuarioID", "Nombre", solicitud.UsuarioSolicitudID);
            return View(solicitud);
        }

        //
        // GET: /Solicitud/Delete/5

        public ActionResult Delete(int id = 0)
        {
            Solicitud solicitud = db.Solicitudes.Find(id);
            if (solicitud == null)
            {
                return HttpNotFound();
            }
            return View(solicitud);
        }

        //
        // POST: /Solicitud/Delete/5

        [HttpPost, ActionName("Delete")]
        public ActionResult DeleteConfirmed(int id)
        {
            Solicitud solicitud = db.Solicitudes.Find(id);
            db.Solicitudes.Remove(solicitud);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        protected override void Dispose(bool disposing)
        {
            if (db != null)
            {
                db.Dispose();
                base.Dispose(disposing);
            }
        }
    }
}